#pragma once

#include "../umlmodel_global.h"

#include "Package.h"

namespace uml {

/// <summary>
/// Model
/// A model captures a view of a physical system. It is an abstraction of the
/// physical system, with a certain purpose. This purpose determines what is to be
/// included in the model and what is irrelevant. Thus the model completely
/// describes those aspects of the physical system that are relevant to the purpose
/// of the model, at the appropriate level of detail.
/// </summary>
class UMLMODEL_EXPORT Model : public Package {

public: // Constructors and destructors
    explicit Model(const QString& umlType="uml::Model");

public: // JsonSerializable override
    void fromJson(const QJsonObject& json, QStringList& errorList) override;
    void toJson(QJsonObject& json) override;

public: // Properties
    /// <summary>
    /// viewpoint getter
    /// The name of the viewpoint that is expressed by a model (this name may refer to a
    /// profile definition).
    /// </summary>
    QString viewpoint() const;

    /// <summary>
    /// viewpoint setter
    /// The name of the viewpoint that is expressed by a model (this name may refer to a
    /// profile definition).
    /// </summary>
    void setViewpoint(const QString& value);

private: // Fields
    /// <summary>
    /// viewpoint
    /// The name of the viewpoint that is expressed by a model (this name may refer to a
    /// profile definition).
    /// </summary>
    const static QString viewpoint_default_;
    QString viewpoint_= viewpoint_default_;

};

} // namespace uml
